[
  {
    "description": "property is equal to another property",
    "schema": {
      "properties": {
        "sameAs": { "const": { "$data": "1/thisOne" } },
        "thisOne": {}
      }
    },
    "tests": [
      {
        "description": "same value is valid",
        "data": {
          "sameAs": 5,
          "thisOne": 5
        },
        "valid": true
      },
      {
        "description": "same object is valid",
        "data": {
          "sameAs": { "foo": 1, "bar": 2 },
          "thisOne": { "bar": 2, "foo": 1 }
        },
        "valid": true
      },
      {
        "description": "another value is invalid",
        "data": {
          "sameAs": { "foo": 1 },
          "thisOne": { "foo": 2 }
        },
        "valid": false
      },
      {
        "description": "another type is invalid",
        "data": {
          "sameAs": 5,
          "thisOne": "5"
        },
        "valid": false
      }
    ]
  },
  {
    "description": "property values are equal to property names",
    "schema": {
      "additionalProperties": {
        "const": { "$data": "0#" }
      }
    },
    "tests": [
      {
        "description": "valid object",
        "data": { "foo": "foo", "bar": "bar", "baz": "baz" },
        "valid": true
      },
      {
        "description": "invalid object",
        "data": { "foo": "bar" },
        "valid": false
      }
    ]
  },
  {
    "description": "items are equal to their indeces",
    "schema": {
      "items": {
        "const": { "$data": "0#" }
      }
    },
    "tests": [
      {
        "description": "valid array",
        "data": [ 0, 1, 2, 3 ],
        "valid": true
      },
      {
        "description": "invalid array",
        "data": [ 0, 2 ],
        "valid": false
      }
    ]
  },
  {
    "description": "items in one array are equal to items in another (limited length)",
    "schema": {
      "properties": {
        "arr": {
          "items": [{},{},{}],
          "additionalItems": false
        },
        "sameArr": {
          "items": [
            { "const": { "$data": "2/arr/0" } },
            { "const": { "$data": "2/arr/1" } },
            { "const": { "$data": "2/arr/2" } }
          ],
          "additionalItems": false
        }
      }
    },
    "tests": [
      {
        "description": "equal arrays are valid",
        "data": {
          "arr": [ 1, "abc", {"foo": "bar"} ],
          "sameArr": [ 1, "abc", {"foo": "bar"} ]
        },
        "valid": true
      },
      {
        "description": "different arrays are invalid",
        "data": {
          "arr": [ 1, "abc", {"foo": "bar"} ],
          "sameArr": [ 1, "abc", {"foo": "foo"} ]
        },
        "valid": false
      }
    ]
  },
  {
    "description": "any data is equal to itself",
    "schema": {
      "const": { "$data": "0" }
    },
    "tests": [
      {
        "description": "number is equal to itself",
        "data": 1,
        "valid": true
      },
      {
        "description": "string is equal to itself",
        "data": "foo",
        "valid": true
      },
      {
        "description": "object is equal to itself",
        "data": { "foo": "bar" },
        "valid": true
      },
      {
        "description": "array is equal to itself",
        "data": [ 1, 2, 3 ],
        "valid": true
      }
    ]
  },
  {
    "description": "property value is contained in array",
    "schema": {
      "properties": {
        "name": { "type": "string" },
        "list": {
          "type": "array",
          "contains": { "const": { "$data": "2/name" } }
        }
      }
    },
    "tests": [
      {
        "description": "1 item array containing property is valid",
        "data": {
          "name": "foo",
          "list": [ "foo" ]
        },
        "valid": true
      },
      {
        "description": "2 item array containing property is valid",
        "data": {
          "name": "foo",
          "list": [ "foo", "bar" ]
        },
        "valid": true
      },
      {
        "description": "array not containing property is invalid",
        "data": {
          "name": "foo",
          "list": [ "bar" ]
        },
        "valid": false
      },
      {
        "description": "empty array is invalid",
        "data": {
          "name": "foo",
          "list": []
        },
        "valid": false
      }
    ]
  }
]
